package pe.gob.mininter.dirandro.vaadin.panel.util;

import java.math.BigDecimal;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import pe.gob.mininter.dirandro.model.Distrito;
import pe.gob.mininter.dirandro.model.Inmueble;
import pe.gob.mininter.dirandro.model.Valor;
import pe.gob.mininter.dirandro.service.InmuebleService;
import pe.gob.mininter.dirandro.service.UbigeoService;
import pe.gob.mininter.dirandro.util.BeanValidar;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.util.HarecUtil;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.panel.parte.PanelRegistroParteInmueble;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.ui.AbstractSelect.Filtering;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;


public class PanelAgregarInmueble extends CustomComponent  implements ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout pnlBody;
	@AutoGenerated
	private HorizontalLayout pnl7;
	@AutoGenerated
	private Button btnCancelar;
	@AutoGenerated
	private Button btnGrabar;
	@AutoGenerated
	private HorizontalLayout pnl6;
	@AutoGenerated
	private TextArea txtObservaciones;
	@AutoGenerated
	private HorizontalLayout pnl5;
	@AutoGenerated
	private TextField txtDimension;
	@AutoGenerated
	private TextField txtLatitud;
	@AutoGenerated
	private TextField txtLongitud;
	@AutoGenerated
	private HorizontalLayout pnl4;
	@AutoGenerated
	private TextField txtValordelTerreno;
	@AutoGenerated
	private TextField txtValordelBien;
	@AutoGenerated
	private HorizontalLayout pnl3;
	@AutoGenerated
	private TextField txtInscripcion;
	@AutoGenerated
	private TextField txtResolucion;
	@AutoGenerated
	private TextField txtOficinaRegistral;
	@AutoGenerated
	private HorizontalLayout pnl2;
	@AutoGenerated
	private ComboBox cmbUbicacion;
	@AutoGenerated
	private HorizontalLayout pnl1;
	@AutoGenerated
	private TextField txtUrb;
	@AutoGenerated
	private TextField txtDir;
	@AutoGenerated
	private ComboBoxLOVS cmbTipoDir;
	@AutoGenerated
	private HorizontalLayout pnl0;
	@AutoGenerated
	private TextArea txtDescripcion;
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Distrito> lstDistrito;
	private UbigeoService ubigeoService;
	private PanelRegistroParteInmueble padre;
	private Inmueble inmueble;
	private InmuebleService inmuebleService;
	
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor. 
	 */
	
	public PanelAgregarInmueble() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		ubigeoService = Injector.obtenerServicio(UbigeoService.class );
		inmuebleService = Injector.obtenerServicio(InmuebleService.class);
		postConstruct();
		debugId();
	}
	
	public void setPadre(PanelRegistroParteInmueble padre) {
		this.padre = padre;
	}
	
	private void debugId(){
		
	}
	
	public void postConstruct() {
		cmbTipoDir.setCodigoLista(Constante.LISTA.CODIGO.DIRECCION_TIPO);
		cmbTipoDir.setInputPrompt("Tipo Dir.");
		cmbTipoDir.setRequired(true);
		
		lstDistrito = ubigeoService.obtenerTodos();
		cmbUbicacion.setInputPrompt("Distrito - Provincia - Departamento");
		cmbUbicacion.setItemCaptionPropertyId("nombreCompleto");
		cmbUbicacion.setContainerDataSource(new BeanItemContainer<Distrito>(Distrito.class,  lstDistrito));
		cmbUbicacion.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		
		btnGrabar.addListener((ClickListener)this);
		btnCancelar.addListener((ClickListener)this);
		limpiar();
	}

	public void limpiar(){
		inmueble=new  Inmueble();
		txtDimension.setValue("");
		txtDir.setValue("");
		txtInscripcion.setValue("");
		txtLatitud.setValue("");
		txtLongitud.setValue("");
		txtOficinaRegistral.setValue("");
		txtResolucion.setValue("");
		txtUrb.setValue("");
		txtValordelBien.setValue("");
		txtValordelTerreno.setValue("");
		txtObservaciones.setValue("");
		txtDescripcion.setValue("");
		cmbTipoDir.select(null);
		cmbUbicacion.select(null);
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnGrabar)){
		
			inmueble.setDescripcion(HarecUtil.nullToEmpty(txtDescripcion.getValue()));
			inmueble.setDimension(!StringUtils.isEmpty((String)txtDimension.getValue())?new BigDecimal(HarecUtil.nullToEmpty(txtDimension.getValue())):null);
			inmueble.setDireccion(HarecUtil.nullToEmpty(txtDir.getValue()));
			inmueble.setLatitud(HarecUtil.nullToEmpty(txtLatitud.getValue()));
			inmueble.setLongitud(HarecUtil.nullToEmpty(txtLongitud.getValue()));
			inmueble.setNroInscripcion(HarecUtil.nullToEmpty(txtInscripcion.getValue()));
			inmueble.setObservaciones(HarecUtil.nullToEmpty(txtObservaciones.getValue()));
			inmueble.setOficinaRegistral(HarecUtil.nullToEmpty(txtOficinaRegistral.getValue()));
			inmueble.setResolucion(HarecUtil.nullToEmpty(txtResolucion.getValue()));
			inmueble.setTipoDireccion((Valor)cmbTipoDir.getValue());
			inmueble.setUbgDistrito((Distrito)cmbUbicacion.getValue());
			inmueble.setUrbanizacion(HarecUtil.nullToEmpty(txtUrb.getValue()));
			inmueble.setValorBien(!StringUtils.isEmpty((String)txtValordelBien.getValue())? new BigDecimal(txtValordelBien.getValue().toString()):null);
			inmueble.setValorTerreno(!StringUtils.isEmpty((String)txtValordelTerreno.getValue())? new BigDecimal(txtValordelTerreno.getValue().toString()):null);
			
			HarecUtil.validar(getWindow(), inmueble, new BeanValidar[]{
				new BeanValidar("descripcion", new Object[]{"Descripción"}, txtDescripcion),
				new BeanValidar("tipoDireccion", new Object[]{"Tipo de Dirección"}, cmbTipoDir),
				new BeanValidar("direccion", new Object[]{"Dirección"}, txtDir),
				new BeanValidar("urbanizacion", new Object[]{"Urbanización"}, txtUrb),
	        	new BeanValidar("ubgDistrito", new Object[]{"Distrito"}, cmbUbicacion)
	        });
			
			inmuebleService.crear(inmueble);
			
			AlertDialog alertDialog = new  AlertDialog("Registro de Inmueble", "Se ha registrado el inmueble correctamente", "Aceptar", "400");
			getApplication().getMainWindow().addWindow(alertDialog);
			btnGrabar.setEnabled(false);
			padre.actualizarInmuebles(inmueble);
			 getApplication().getMainWindow().removeWindow(getWindow());
		}else{
			 getApplication().getMainWindow().removeWindow(getWindow());
		}
	}

			
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("-1px");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("-1px");
		setHeight("-1px");
		
		// pnlBody
		pnlBody = buildPnlBody();
		mainLayout.addComponent(pnlBody);
		mainLayout.setComponentAlignment(pnlBody, new Alignment(20));
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildPnlBody() {
		// common part: create layout
		pnlBody = new VerticalLayout();
		pnlBody.setImmediate(false);
		pnlBody.setWidth("-1px");
		pnlBody.setHeight("-1px");
		pnlBody.setMargin(true);
		pnlBody.setSpacing(true);
		
		// pnl0
		pnl0 = buildPnl0();
		pnlBody.addComponent(pnl0);
		
		// pnl1
		pnl1 = buildPnl1();
		pnlBody.addComponent(pnl1);
		
		// pnl2
		pnl2 = buildPnl2();
		pnlBody.addComponent(pnl2);
		
		// pnl3
		pnl3 = buildPnl3();
		pnlBody.addComponent(pnl3);
		
		// pnl4
		pnl4 = buildPnl4();
		pnlBody.addComponent(pnl4);
		
		// pnl5
		pnl5 = buildPnl5();
		pnlBody.addComponent(pnl5);
		
		// pnl6
		pnl6 = buildPnl6();
		pnlBody.addComponent(pnl6);
		
		// pnl7
		pnl7 = buildPnl7();
		pnlBody.addComponent(pnl7);
		pnlBody.setComponentAlignment(pnl7, new Alignment(20));
		
		return pnlBody;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl0() {
		// common part: create layout
		pnl0 = new HorizontalLayout();
		pnl0.setImmediate(false);
		pnl0.setWidth("-1px");
		pnl0.setHeight("-1px");
		pnl0.setMargin(false);
		
		// txtDescripcion
		txtDescripcion = new TextArea();
		txtDescripcion.setCaption("Descripción");
		txtDescripcion.setImmediate(false);
		txtDescripcion.setWidth("500px");
		txtDescripcion.setHeight("60px");
		txtDescripcion.setRequired(true);
		txtDescripcion.setInputPrompt("Descripción");
		txtDescripcion.setMaxLength(1000);
		pnl0.addComponent(txtDescripcion);
		
		return pnl0;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl1() {
		// common part: create layout
		pnl1 = new HorizontalLayout();
		pnl1.setImmediate(false);
		pnl1.setWidth("-1px");
		pnl1.setHeight("-1px");
		pnl1.setMargin(false);
		pnl1.setSpacing(true);
		
		// cmbTipoDir
		cmbTipoDir = new ComboBoxLOVS();
		cmbTipoDir.setCaption("Tipo Dirección");
		cmbTipoDir.setImmediate(false);
		cmbTipoDir.setWidth("100px");
		cmbTipoDir.setHeight("-1px");
		pnl1.addComponent(cmbTipoDir);
		
		// txtDir
		txtDir = new TextField();
		txtDir.setCaption("Dirección");
		txtDir.setImmediate(false);
		txtDir.setWidth("258px");
		txtDir.setHeight("-1px");
		txtDir.setRequired(true);
		txtDir.setInputPrompt("Dirección");
		txtDir.setMaxLength(200);
		pnl1.addComponent(txtDir);
		
		// txtUrb
		txtUrb = new TextField();
		txtUrb.setCaption("Urbanización");
		txtUrb.setImmediate(false);
		txtUrb.setWidth("-1px");
		txtUrb.setHeight("-1px");
		txtUrb.setRequired(true);
		txtUrb.setInputPrompt("Urbanización");
		pnl1.addComponent(txtUrb);
		
		return pnl1;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl2() {
		// common part: create layout
		pnl2 = new HorizontalLayout();
		pnl2.setImmediate(false);
		pnl2.setWidth("-1px");
		pnl2.setHeight("-1px");
		pnl2.setMargin(false);
		pnl2.setSpacing(true);
		
		// cmbUbicacion
		cmbUbicacion = new ComboBox();
		cmbUbicacion.setCaption("Ubicación");
		cmbUbicacion.setImmediate(false);
		cmbUbicacion.setWidth("-1px");
		cmbUbicacion.setHeight("-1px");
		cmbUbicacion.setRequired(true);
		pnl2.addComponent(cmbUbicacion);
		
		return pnl2;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl3() {
		// common part: create layout
		pnl3 = new HorizontalLayout();
		pnl3.setImmediate(false);
		pnl3.setWidth("-1px");
		pnl3.setHeight("-1px");
		pnl3.setMargin(false);
		pnl3.setSpacing(true);
		
		// txtOficinaRegistral
		txtOficinaRegistral = new TextField();
		txtOficinaRegistral.setCaption("Oficina Registral");
		txtOficinaRegistral.setImmediate(false);
		txtOficinaRegistral.setWidth("-1px");
		txtOficinaRegistral.setHeight("-1px");
		txtOficinaRegistral.setInputPrompt("Oficina Registral");
		txtOficinaRegistral.setMaxLength(50);
		pnl3.addComponent(txtOficinaRegistral);
		
		// txtResolucion
		txtResolucion = new TextField();
		txtResolucion.setCaption("Resolución");
		txtResolucion.setImmediate(false);
		txtResolucion.setWidth("-1px");
		txtResolucion.setHeight("-1px");
		txtResolucion.setInputPrompt("Resolución");
		txtResolucion.setMaxLength(50);
		pnl3.addComponent(txtResolucion);
		
		// txtInscripcion
		txtInscripcion = new TextField();
		txtInscripcion.setCaption("Nº Inscripción");
		txtInscripcion.setImmediate(false);
		txtInscripcion.setWidth("-1px");
		txtInscripcion.setHeight("-1px");
		txtInscripcion.setInputPrompt("Nº Inscripción");
		txtInscripcion.setMaxLength(50);
		pnl3.addComponent(txtInscripcion);
		
		return pnl3;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl4() {
		// common part: create layout
		pnl4 = new HorizontalLayout();
		pnl4.setImmediate(false);
		pnl4.setWidth("-1px");
		pnl4.setHeight("-1px");
		pnl4.setMargin(false);
		pnl4.setSpacing(true);
		
		// txtValordelBien
		txtValordelBien = new TextField();
		txtValordelBien.setCaption("Valor del Bien");
		txtValordelBien.setImmediate(false);
		txtValordelBien.setWidth("-1px");
		txtValordelBien.setHeight("-1px");
		txtValordelBien.setInputPrompt("Valor del Bien");
		txtValordelBien.setMaxLength(10);
		pnl4.addComponent(txtValordelBien);
		
		// txtValordelTerreno
		txtValordelTerreno = new TextField();
		txtValordelTerreno.setCaption("Valor del Terreno");
		txtValordelTerreno.setImmediate(false);
		txtValordelTerreno.setWidth("-1px");
		txtValordelTerreno.setHeight("-1px");
		txtValordelTerreno.setInputPrompt("Valor del Terreno");
		txtValordelTerreno.setMaxLength(10);
		pnl4.addComponent(txtValordelTerreno);
		
		return pnl4;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl5() {
		// common part: create layout
		pnl5 = new HorizontalLayout();
		pnl5.setImmediate(false);
		pnl5.setWidth("-1px");
		pnl5.setHeight("-1px");
		pnl5.setMargin(false);
		pnl5.setSpacing(true);
		
		// txtLongitud
		txtLongitud = new TextField();
		txtLongitud.setCaption("Longitud");
		txtLongitud.setImmediate(false);
		txtLongitud.setWidth("-1px");
		txtLongitud.setHeight("-1px");
		txtLongitud.setInputPrompt("Longitud");
		txtLongitud.setMaxLength(50);
		pnl5.addComponent(txtLongitud);
		
		// txtLatitud
		txtLatitud = new TextField();
		txtLatitud.setCaption("Latitud");
		txtLatitud.setImmediate(false);
		txtLatitud.setWidth("-1px");
		txtLatitud.setHeight("-1px");
		txtLatitud.setInputPrompt("Latitud");
		txtLatitud.setMaxLength(50);
		pnl5.addComponent(txtLatitud);
		
		// txtDimension
		txtDimension = new TextField();
		txtDimension.setCaption("Dimensión");
		txtDimension.setImmediate(false);
		txtDimension.setWidth("-1px");
		txtDimension.setHeight("-1px");
		txtDimension.setInputPrompt("Dimensión");
		txtDimension.setMaxLength(10);
		pnl5.addComponent(txtDimension);
		
		return pnl5;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl6() {
		// common part: create layout
		pnl6 = new HorizontalLayout();
		pnl6.setImmediate(false);
		pnl6.setWidth("-1px");
		pnl6.setHeight("-1px");
		pnl6.setMargin(false);
		
		// txtObservaciones
		txtObservaciones = new TextArea();
		txtObservaciones.setCaption("Observaciones");
		txtObservaciones.setImmediate(false);
		txtObservaciones.setWidth("500px");
		txtObservaciones.setHeight("90px");
		txtObservaciones.setInputPrompt("Observaciones");
		txtObservaciones.setMaxLength(1000);
		pnl6.addComponent(txtObservaciones);
		
		return pnl6;
	}

	@AutoGenerated
	private HorizontalLayout buildPnl7() {
		// common part: create layout
		pnl7 = new HorizontalLayout();
		pnl7.setImmediate(false);
		pnl7.setWidth("-1px");
		pnl7.setHeight("-1px");
		pnl7.setMargin(false);
		pnl7.setSpacing(true);
		
		// btnGrabar
		btnGrabar = new Button();
		btnGrabar.setCaption("Grabar");
		btnGrabar.setImmediate(true);
		btnGrabar.setWidth("-1px");
		btnGrabar.setHeight("-1px");
		pnl7.addComponent(btnGrabar);
		
		// btnCancelar
		btnCancelar = new Button();
		btnCancelar.setCaption("Cancelar");
		btnCancelar.setImmediate(true);
		btnCancelar.setWidth("-1px");
		btnCancelar.setHeight("-1px");
		pnl7.addComponent(btnCancelar);
		
		return pnl7;
	}

}
